package fun.werfamily.payment.domain.service;

import fun.werfamily.payment.domain.dto.req.PayCreateReq;
import fun.werfamily.payment.domain.dto.resp.PaySuccessRespDTO;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: Mr.WenMing Zhang
 * @Date: 2023-05-02 19:34
 * @Description:
 */
public abstract class PaymentBaseAbstractService implements IPaymentService {

    /**
     * 创建支付单
     *
     * @param req
     * @return
     */
    public PaySuccessRespDTO createPay(PayCreateReq req) {
        // 支付前置校验，1.参数校验，2.是否可以发起支付校验
        postCheck(req);
        // 执行支付动作
        PaySuccessRespDTO paySuccessRespDTO = doPay(req);
        // 后置处理
        doAfter(req, paySuccessRespDTO);
        return paySuccessRespDTO;
    }

    public abstract PaySuccessRespDTO doPay(PayCreateReq req);

    /**
     * 支付前置处理
     *
     * @param req
     */
    public abstract void postCheck(PayCreateReq req);

    /**
     * 后置处理
     *
     * @param req
     * @param paySuccessRespDTO
     */
    public void doAfter(PayCreateReq req, PaySuccessRespDTO paySuccessRespDTO) {

    }
}
